package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.IAttendPayMethodDAO;
import org.jsola.hr.dto.AttendPayMethodAddDTO;
import org.jsola.hr.dto.AttendPayMethodUpdateDTO;
import org.jsola.hr.entity.AttendPayMethodDO;
import org.jsola.hr.query.AttendPayMethodQuery;
import org.jsola.hr.vo.AttendPayMethodListVO;
import org.jsola.hr.vo.AttendPayMethodVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * @author zhr
 */
public interface IAttendPayMethodService extends IService<IAttendPayMethodDAO, AttendPayMethodDO> {

    /**
     * 新增计薪方式
     * @param attendPayMethodAddDTO 新增计薪方式DTO
     * @param tokenUser 当前用户
     * @return 计薪方式详情信息
     */
    AttendPayMethodVO save(AttendPayMethodAddDTO attendPayMethodAddDTO, TokenUser tokenUser);

    /**
     * 修改计薪方式
     * @param attendPayMethodUpdateDTO 修改计薪方式DTO
     * @param tokenUser 当前用户
     * @return 更新数量
     */
    int update(AttendPayMethodUpdateDTO attendPayMethodUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除计薪方式，物理删除，更新is_valid字段，从回收站删除
     * @param tokenUser 当前用户
     * @param attendPayMethodIds 计薪方式id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String...attendPayMethodIds);

    /**
     * 根据计薪方式id查找
     * @param attendPayMethodId 计薪方式id
     * @param siteId 所属站点id
     * @return 计薪方式详情信息
     */
    AttendPayMethodVO selectById(String attendPayMethodId, String siteId);

    /**
     * 查询计薪方式
     * @param attendPayMethodQuery 查询条件
     * @param siteId 所属站点id
     * @return 计薪方式列表信息
     */
    List<AttendPayMethodListVO> select(AttendPayMethodQuery attendPayMethodQuery, String siteId);

    /**
    * 查询计薪方式记录数
    * @param attendPayMethodQuery 查询条件
    * @param siteId 所属站点id
    * @return 计薪方式记录数
    */
    int selectCount(AttendPayMethodQuery attendPayMethodQuery, String siteId);

    /**
     * 分页查询计薪方式
     * @param attendPayMethodQuery 查询条件
     * @param siteId 所属站点id
     * @return 计薪方式列表信息
     */
    Page<AttendPayMethodListVO> selectPage(AttendPayMethodQuery attendPayMethodQuery, String siteId);


    /**
     * 根据计薪方式id查找
     * @param attendPayMethodId 计薪方式id
     * @param siteId 所属站点id
     * @return 计薪方式
     */
    AttendPayMethodDO selectDOById(String attendPayMethodId, String siteId);

    /**
     * 查询计薪方式
     * @param attendPayMethodQuery 查询条件
     * @param siteId 所属站点id
     * @return 计薪方式列表
     */
    List<AttendPayMethodDO> selectDO(AttendPayMethodQuery attendPayMethodQuery, String siteId);
}


